/*! * 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); }
public ShrunkenCreature(Mobile owner, BaseCreature creature) : base(ShrinkTable.Lookup(creature.Body)) { m_Owner = owner; m_Creature = creature; Name = SphereUtils.GenericComputeName(this); Hue = creature.Hue; }
private void Update() { //Separation(); SphereUtils.AlignToSphereSurface(transform, planet); SphereUtils.LookAtTarget(transform, planet, target); if (unitTask == UnitTask.MoveToTarget) { MovementLogic(); } }
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 }
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)); }
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))); } }
public Vector3 GetCenterPoint() => SphereUtils.GetCenterPoint(vertices[0], vertices[1], vertices[2]);
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); }