diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSActors.cs')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSActors.cs | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs index fb4d452..12a8817 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActors.cs | |||
@@ -42,24 +42,36 @@ public class BSActorCollection | |||
42 | } | 42 | } |
43 | public void Add(string name, BSActor actor) | 43 | public void Add(string name, BSActor actor) |
44 | { | 44 | { |
45 | m_actors[name] = actor; | 45 | lock (m_actors) |
46 | { | ||
47 | if (!m_actors.ContainsKey(name)) | ||
48 | { | ||
49 | m_actors[name] = actor; | ||
50 | } | ||
51 | } | ||
46 | } | 52 | } |
47 | public bool RemoveAndRelease(string name) | 53 | public bool RemoveAndRelease(string name) |
48 | { | 54 | { |
49 | bool ret = false; | 55 | bool ret = false; |
50 | if (m_actors.ContainsKey(name)) | 56 | lock (m_actors) |
51 | { | 57 | { |
52 | BSActor beingRemoved = m_actors[name]; | 58 | if (m_actors.ContainsKey(name)) |
53 | beingRemoved.Dispose(); | 59 | { |
54 | m_actors.Remove(name); | 60 | BSActor beingRemoved = m_actors[name]; |
55 | ret = true; | 61 | m_actors.Remove(name); |
62 | beingRemoved.Dispose(); | ||
63 | ret = true; | ||
64 | } | ||
56 | } | 65 | } |
57 | return ret; | 66 | return ret; |
58 | } | 67 | } |
59 | public void Clear() | 68 | public void Clear() |
60 | { | 69 | { |
61 | Release(); | 70 | lock (m_actors) |
62 | m_actors.Clear(); | 71 | { |
72 | Release(); | ||
73 | m_actors.Clear(); | ||
74 | } | ||
63 | } | 75 | } |
64 | public void Dispose() | 76 | public void Dispose() |
65 | { | 77 | { |
@@ -69,15 +81,22 @@ public class BSActorCollection | |||
69 | { | 81 | { |
70 | return m_actors.ContainsKey(name); | 82 | return m_actors.ContainsKey(name); |
71 | } | 83 | } |
84 | public bool TryGetActor(string actorName, out BSActor theActor) | ||
85 | { | ||
86 | return m_actors.TryGetValue(actorName, out theActor); | ||
87 | } | ||
72 | public void ForEachActor(Action<BSActor> act) | 88 | public void ForEachActor(Action<BSActor> act) |
73 | { | 89 | { |
74 | foreach (KeyValuePair<string, BSActor> kvp in m_actors) | 90 | lock (m_actors) |
75 | act(kvp.Value); | 91 | { |
92 | foreach (KeyValuePair<string, BSActor> kvp in m_actors) | ||
93 | act(kvp.Value); | ||
94 | } | ||
76 | } | 95 | } |
77 | 96 | ||
78 | public void Enable(bool enabl) | 97 | public void Enable(bool enabl) |
79 | { | 98 | { |
80 | ForEachActor(a => a.Enable(enabl)); | 99 | ForEachActor(a => a.SetEnabled(enabl)); |
81 | } | 100 | } |
82 | public void Release() | 101 | public void Release() |
83 | { | 102 | { |
@@ -106,7 +125,7 @@ public abstract class BSActor | |||
106 | { | 125 | { |
107 | protected BSScene m_physicsScene { get; private set; } | 126 | protected BSScene m_physicsScene { get; private set; } |
108 | protected BSPhysObject m_controllingPrim { get; private set; } | 127 | protected BSPhysObject m_controllingPrim { get; private set; } |
109 | protected bool Enabled { get; set; } | 128 | public virtual bool Enabled { get; set; } |
110 | public string ActorName { get; private set; } | 129 | public string ActorName { get; private set; } |
111 | 130 | ||
112 | public BSActor(BSScene physicsScene, BSPhysObject pObj, string actorName) | 131 | public BSActor(BSScene physicsScene, BSPhysObject pObj, string actorName) |
@@ -122,8 +141,10 @@ public abstract class BSActor | |||
122 | { | 141 | { |
123 | get { return Enabled; } | 142 | get { return Enabled; } |
124 | } | 143 | } |
125 | // Turn the actor on an off. | 144 | |
126 | public virtual void Enable(bool setEnabled) | 145 | // Turn the actor on an off. Only used by ActorCollection to set all enabled/disabled. |
146 | // Anyone else should assign true/false to 'Enabled'. | ||
147 | public void SetEnabled(bool setEnabled) | ||
127 | { | 148 | { |
128 | Enabled = setEnabled; | 149 | Enabled = setEnabled; |
129 | } | 150 | } |