示例#1
0
    /*!
     * The number of triangle recursions in this chunk.
     *
     * @param a - Top
     * @param b - Bottom Right
     * @param c - Bottom Left
     */
    private void SubdivideFace(int _top, int _bottomRight, int _bottomLeft, int n)
    {
        vertices.Add(SphereUtils.GetMidPointVertex(vertices[_top], vertices[_bottomRight]));
        vertices.Add(SphereUtils.GetMidPointVertex(vertices[_bottomRight], vertices[_bottomLeft]));
        vertices.Add(SphereUtils.GetMidPointVertex(vertices[_bottomLeft], vertices[_top]));

        var middleRight  = vertices.Count - 3;
        var middleBottom = vertices.Count - 2;
        var middleLeft   = vertices.Count - 1;

        // Only draw the last recursion
        if (n == 1)
        {
            triangles.AddRange(new List <int> {
                _top, middleRight, middleLeft
            });                                                                  // Upper Top
            triangles.AddRange(new List <int> {
                middleLeft, middleBottom, _bottomLeft
            });                                                                          // Lower Left
            triangles.AddRange(new List <int> {
                middleBottom, middleLeft, middleRight
            });                                                                          // Lower Mid
            triangles.AddRange(new List <int> {
                middleRight, _bottomRight, middleBottom
            });                                                                            // Lower Right

            return;
        }

        SubdivideFace(_top, middleRight, middleLeft, n - 1);
        SubdivideFace(middleLeft, middleBottom, _bottomLeft, n - 1);
        SubdivideFace(middleBottom, middleLeft, middleRight, n - 1);
        SubdivideFace(middleRight, _bottomRight, middleBottom, n - 1);
    }
示例#2
0
 public ShrunkenCreature(Mobile owner, BaseCreature creature) : base(ShrinkTable.Lookup(creature.Body))
 {
     m_Owner    = owner;
     m_Creature = creature;
     Name       = SphereUtils.GenericComputeName(this);
     Hue        = creature.Hue;
 }
示例#3
0
    private void Update()
    {
        //Separation();
        SphereUtils.AlignToSphereSurface(transform, planet);
        SphereUtils.LookAtTarget(transform, planet, target);

        if (unitTask == UnitTask.MoveToTarget)
        {
            MovementLogic();
        }
    }
示例#4
0
    public void Update()
    {
        if (unitGroupTask == UnitGroupTask.MoveToTarget)
        {
            SphereUtils.AlignToSphereSurface(groupOrigin, planet);
            SphereUtils.LookAtTarget(groupOrigin, planet, target);

            AlignWithGroupOrigin();

            var speed = 10f;
            groupOrigin.position = Vector3.RotateTowards(groupOrigin.position, target, (speed / planetRadius) * Time.deltaTime, 1);

            if (Vector3.Distance(groupOrigin.position, target) < 1)
            {
                // Additional logic needed eventually.
                unitGroupTask = UnitGroupTask.Idle;
            }
        }
    }
    /*!
     * The number of chunk recursions per base face.
     */
    private void GenerateChunks(List <Vector3> _vertices, int n)
    {
        _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[0], _vertices[1])); // Right Middle (3)
        _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[1], _vertices[2])); // Bottom Middle (4)
        _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[2], _vertices[0])); // Left middle (5)

        // Only draw the last recursion
        if (n == 1)
        {
            GenerateChunk(new List <Vector3> {
                _vertices[0], _vertices[3], _vertices[5]
            });                                                                            // Top
            GenerateChunk(new List <Vector3> {
                _vertices[5], _vertices[4], _vertices[2]
            });                                                                            // Bottom Left
            GenerateChunk(new List <Vector3> {
                _vertices[4], _vertices[5], _vertices[3]
            });                                                                            // Bottom Middle
            GenerateChunk(new List <Vector3> {
                _vertices[3], _vertices[1], _vertices[4]
            });                                                                            // Bottom Right

            return;
        }

        GenerateChunks(new List <Vector3> {
            _vertices[0], _vertices[3], _vertices[5]
        }, n - 1);                                                                             // Top
        GenerateChunks(new List <Vector3> {
            _vertices[5], _vertices[4], _vertices[2]
        }, n - 1);                                                                             // Bottom Left
        GenerateChunks(new List <Vector3> {
            _vertices[4], _vertices[5], _vertices[3]
        }, n - 1);                                                                             // Bottom Middle
        GenerateChunks(new List <Vector3> {
            _vertices[3], _vertices[1], _vertices[4]
        }, n - 1);                                                                             // Bottom Right
    }
示例#6
0
        public override void OnSingleClick(Mobile from)
        {
            if (from.NetState.Version.Major <= 3)
            {
                DisplayRarity(from);
                from.Send(new AsciiMessage(Serial, ItemID, MessageType.Label, 0x3B2, 3, "", SphereUtils.ComputeName(this)));
                //base.OnSingleClick(from);
                if (!SkillBonuses.IsEmpty)
                {
                    if (SkillBonuses.Skill_1_Value > 0)
                    {
                        from.Send(new AsciiMessage(Serial, ItemID, MessageType.Label, 0x803, 3, "", "[ +" + SkillBonuses.Skill_1_Value + " " + SkillBonuses.Skill_1_Name.ToString() + " ]"));
                    }
                    if (SkillBonuses.Skill_2_Value > 0)
                    {
                        from.Send(new AsciiMessage(Serial, ItemID, MessageType.Label, 0x803, 3, "", "[ +" + SkillBonuses.Skill_2_Value + " " + SkillBonuses.Skill_2_Name.ToString() + " ]"));
                    }
                }
                return;
            }

            List <EquipInfoAttribute> attrs = new List <EquipInfoAttribute>();

            AddEquipInfoAttributes(from, attrs);

            int number;

            if (Name == null)
            {
                number = LabelNumber;
            }
            else
            {
                this.LabelTo(from, Name);
                number = 1041000;
            }

            if (attrs.Count == 0 && Crafter == null && Name != null)
            {
                return;
            }

            EquipmentInfo eqInfo = new EquipmentInfo(number, m_Crafter, false, attrs.ToArray());

            from.Send(new DisplayEquipmentInfo(this, eqInfo));
        }
示例#7
0
 public override void OnSingleClick(Mobile from)
 {
     if (from.NetState.Version.Major <= 3)
     {
         //base.OnSingleClick(from);
         from.Send(new AsciiMessage(Serial, ItemID, MessageType.Label, 0x3B2, 3, "", SphereUtils.ComputeName(this)));
     }
 }
示例#8
0
 public Vector3 GetCenterPoint() => SphereUtils.GetCenterPoint(vertices[0], vertices[1], vertices[2]);
示例#9
0
    public override Geometry Execute(Geometry geometry)
    {
        int vertexOffset = geometry.vertices.Count;

        for (int i = 0; i < CTesselation; ++i)
        {
            int pointsCount = i == 0 ? 1 : RTesselation;

            //generate circle
            for (int j = 0; j < pointsCount; ++j)
            {
                float angle   = 360.0f / RTesselation * j;
                float rCircle = Radius / (CTesselation - 1) * i;
                float x       = Mathf.Sin(angle * Mathf.Deg2Rad) * rCircle;
                float z       = Mathf.Cos(angle * Mathf.Deg2Rad) * rCircle;


                float y = (SphereUtils.SphereCenterOffset(CapRadius, rCircle) - SphereUtils.SphereCenterOffset(CapRadius, Radius)) * Mathf.Sign(CapRadius);



                geometry.vertices.Add(new Vector3(x, y, z));

                geometry.normals.Add(Vector3.up);
            }
        }

        //indices
        for (int i = 0; i < CTesselation - 1; ++i)
        {
            if (i == 0)
            {
                for (int j = 0; j < RTesselation; ++j)
                {
                    geometry.indices.Add(0 + vertexOffset);
                    geometry.indices.Add(j + 1 + vertexOffset);
                    geometry.indices.Add((j + 1) % RTesselation + 1 + vertexOffset);
                }
                vertexOffset += 1;
            }
            else
            {
                for (int j = 0; j < RTesselation; ++j)
                {
                    int a0 = RTesselation * (i - 1) + j;
                    int a1 = RTesselation * (i - 1) + (j + 1) % RTesselation;

                    int b0 = RTesselation * (i - 0) + j;
                    int b1 = RTesselation * (i - 0) + (j + 1) % RTesselation;


                    geometry.indices.Add(a0 + vertexOffset);
                    geometry.indices.Add(b0 + vertexOffset);
                    geometry.indices.Add(a1 + vertexOffset);

                    geometry.indices.Add(b0 + vertexOffset);
                    geometry.indices.Add(b1 + vertexOffset);
                    geometry.indices.Add(a1 + vertexOffset);
                }
            }
        }

        return(geometry);
    }