Esempio n. 1
0
        private void killTrees()
        {
            foreach (UUID tree in m_trees)
            {
                double killLikelyhood = 0.0;

                if (m_scene.Entities.ContainsKey(tree))
                {
                    SceneObjectPart selectedTree      = ((SceneObjectGroup)m_scene.Entities[tree]).RootPart;
                    double          selectedTreeScale = Math.Sqrt(Math.Pow(selectedTree.Scale.X, 2) +
                                                                  Math.Pow(selectedTree.Scale.Y, 2) +
                                                                  Math.Pow(selectedTree.Scale.Z, 2));

                    foreach (UUID picktree in m_trees)
                    {
                        if (picktree != tree)
                        {
                            SceneObjectPart pickedTree = ((SceneObjectGroup)m_scene.Entities[picktree]).RootPart;

                            double pickedTreeScale = Math.Sqrt(Math.Pow(pickedTree.Scale.X, 2) +
                                                               Math.Pow(pickedTree.Scale.Y, 2) +
                                                               Math.Pow(pickedTree.Scale.Z, 2));

                            double pickedTreeDistance = Math.Sqrt(Math.Pow(Math.Abs(pickedTree.AbsolutePosition.X - selectedTree.AbsolutePosition.X), 2) +
                                                                  Math.Pow(Math.Abs(pickedTree.AbsolutePosition.Y - selectedTree.AbsolutePosition.Y), 2) +
                                                                  Math.Pow(Math.Abs(pickedTree.AbsolutePosition.Z - selectedTree.AbsolutePosition.Z), 2));

                            killLikelyhood += (selectedTreeScale / (pickedTreeScale * pickedTreeDistance)) * 0.1;
                        }
                    }

                    if (Util.RandomClass.NextDouble() < killLikelyhood)
                    {
                        m_scene.DeleteSceneObject(selectedTree.ParentGroup, false);
                        m_trees.Remove(selectedTree.ParentGroup.UUID);

                        m_scene.ForEachClient(delegate(IClientAPI controller)
                        {
                            controller.SendKillObject(m_scene.RegionInfo.RegionHandle,
                                                      selectedTree.LocalId);
                        });

                        break;
                    }
                    selectedTree.SetText(killLikelyhood.ToString(), new Vector3(1.0f, 1.0f, 1.0f), 1.0);
                }
                else
                {
                    m_trees.Remove(tree);
                }
            }
        }