示例#1
0
        public static ArrowHelper Create(Renderer renderer, Vector3 dir, Vector3 origin, float length = 1, Color? color = null, float? headLength = null, float? headWidth = null)
        {
            var c = color.HasValue ? color.Value : new Color(0xffff00);

            if (lineGeometry == null)
            {
                lineGeometry = new Geometry();
                lineGeometry.vertices.Add(Vector3.Zero);
                lineGeometry.vertices.Add(Vector3.UnitY);
                lineGeometry.vertexColors = new List<Color>()
                {
                    c,
                    c,
                };
            }

            if (coneGeometry == null)
            {
                coneGeometry = new CylinderGeometry(0, 0.5f, 1, 5, 1);
                var m = Matrix4.MakeTranslation(0, -0.5f, 0);
                coneGeometry.Apply(m);
            }

            var arrowHelper = new ArrowHelper();

            // dir is assumed to be normalized
            
            var head = headLength.HasValue ? headLength.Value : 0.2f * length;
            var width = headWidth.HasValue ? headWidth.Value : 0.2f * head;

            arrowHelper.Position = origin;
            arrowHelper.line = new Line(lineGeometry, new LineBasicMaterial(renderer)
            {
                Diffuse = c,
                VertexColors = Net.Renderers.VertexColorMode.Vertex
            });
            arrowHelper.line.matrixAutoUpdate = false;
            arrowHelper.Add(arrowHelper.line);

            arrowHelper.cone = new Mesh(coneGeometry, new MeshBasicMaterial(renderer)
            {
                Diffuse = c
            });
            arrowHelper.cone.matrixAutoUpdate = false;
            arrowHelper.Add(arrowHelper.cone);

            arrowHelper.SetDirection(dir.Normalized());
            arrowHelper.SetLength(length, head, width);

            return arrowHelper;
        }
示例#2
0
        // Project vector onto sphere's surface
        private VertexInfo Prepare(Vector3 vector, List<VertexInfo> vertexSet)
        {
            var p = vector.Normalized();
            var i = vertexSet.Count;
            var u = Azimuth(vector) / 2 / Mathf.Pi + 0.5f;
            var v = Inclination(vector) / Mathf.Pi + 0.5f;

            var vertex = new VertexInfo()
            {
                Position = p,
                Index = i,
                // Texture coords are equivalent to map coords, calculate angle and convert to fraction of a circle.
                UV = new Vector2(u, 1 - v)
            };
            vertexSet.Add(vertex);
            return vertex;
        }
示例#3
0
 private static void ShouldLookAt(Vector3 direction)
 {
     direction = direction.Normalized();
     var quaternionLook = Quaternion.LookAt(direction)*Vector3.Forward;
     Compare(quaternionLook, direction);
 }
示例#4
0
		Color4 SunColor ( Vector3 dir )
		{
			Color4 dusk		=	new Color4(Temperature.Get(2000), 1);
			Color4 zenith	=	new Color4(Temperature.Get(Params.SunTemperature), 1);

			Vector3 ndir	=	dir.Normalized();

			return Color4.Lerp( dusk, zenith, (float)Math.Pow(ndir.Y, 0.5f) );
		}
        public static void Test_Vector3_Generic_Normalization_Against_Unity3D(float a, float b, float c)
        {
            //arrange
            Vector3<float> genericVec3 = new Vector3<float>(a, b, c);

            UnityEngine.Vector3 unityVec3 = new UnityEngine.Vector3(a, b, c);

            //act
            Vector3<float> genericNormalized = genericVec3.Normalized();
            UnityEngine.Vector3 unityNormalized = unityVec3.normalized;

            //assert
            //Warning: We provide more accurate normalized components than Unity. Magnitudes are almost exactly the same
            //For example see: http://www.wolframalpha.com/input/?i=normalize%285.3%2C+6.5%2C+7.6%29 in this case Unity provides nearly even components
            //we provide exactly what Wolfram does.
            Assert.AreEqual(unityNormalized.magnitude, genericNormalized.Magnitude(), 1.1E-6, "Normalization failed. Generic:{0} Unity:{1}", genericNormalized, unityNormalized);
        }
示例#6
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="targetID"></param>
		/// <param name="attackerID"></param>
		/// <param name="damage"></param>
		/// <param name="kickImpulse"></param>
		/// <param name="kickPoint"></param>
		/// <param name="damageType"></param>
		public override bool Damage ( uint targetID, uint attackerID, short damage, Vector3 kickImpulse, Vector3 kickPoint, DamageType damageType )
		{
			if (damage<=0) {
				return false;
			}

			var c = controller;
			var e = Entity;

			c.SupportFinder.ClearSupportData();
			var i = MathConverter.Convert( kickImpulse );
			var p = MathConverter.Convert( kickPoint );
			c.Body.ApplyImpulse( p, i );

			/**************************************************
			 * 
			 *	1. Accumulate damage and emit FX according to 
			 *	maximum inflicted damage.
			 *	Probably we have to add new controller stage 
			 *	for FX processing (e.g. Update and UpdateFX).
			 *	
			 *	2. Do not scream at each damage. 
			 *	Screams should not overlap!
			 * 
			**************************************************/

			//
			//	calc health :
			//
			var health	=	e.GetItemCount( Inventory.Health );
			health -= damage;

			var dir = kickImpulse.Normalized();

			if (health>75) {
				World.SpawnFX("PlayerPain25", targetID, kickPoint, dir );
			} else
			if (health>50) {
				World.SpawnFX("PlayerPain50", targetID, kickPoint, dir );
			} else
			if (health>25) {
				World.SpawnFX("PlayerPain75", targetID, kickPoint, dir );
			} else
			if (health>0) {
				World.SpawnFX("PlayerPain100", targetID, kickPoint, dir );
			} else
			if (health>-25) {
				World.SpawnFX("PlayerDeath", targetID, e.Position, dir );
			} else {
				World.SpawnFX("PlayerDeathMeat", targetID, e.Position, kickImpulse, dir );
			}

			if (health<=0) {
				World.Kill( targetID );
				return true;
			}

			e.SetItemCount( Inventory.Health, health );

			return false;
		}
示例#7
0
        private static bool Combo()
        {
            var flags = Orbwalker.ActiveModesFlags;
            if (flags.HasFlag(Orbwalker.ActiveModes.Combo) && menuIni.Get<CheckBox>("Combo").CurrentValue)
            {
                var qm = ComboMenu.Get<CheckBox>("CUse_Q").CurrentValue;
                var wm = ComboMenu.Get<CheckBox>("CUse_W").CurrentValue;
                var em = ComboMenu.Get<CheckBox>("CUse_E").CurrentValue;

                {
                    if (eTarget == null && E.Handle.ToggleState == 2)
                    {
                        E.Cast();
                    }

                    if (eTarget != null)
                    {
                        if (em && E.IsReady() && !player.IsZombie)
                        {
                            if (eTarget.IsValidTarget(E.Range) && E.Handle.ToggleState != 2)
                            {
                                E.Cast();
                            }
                        }
                    }

                    double countmana = W.Handle.SData.Mana;
                    if (wm && W.IsReady() && wTarget.IsValid && wTarget != null)
                    {
                        double ds = 0;

                        if (R.IsReady())
                        {
                            ds += player.GetSpellDamage(qTarget, SpellSlot.R);
                            countmana += R.Handle.SData.Mana;
                        }

                        while (qTarget != null && ds < qTarget.MaxHealth)
                        {
                            var qd = player.GetSpellDamage(qTarget, SpellSlot.Q);

                            ds += qd;
                            if (Q.Handle != null)
                            {
                                countmana += Q.Handle.SData.Mana;
                            }
                        }

                        var predW = W.GetPrediction(wTarget);
                        if (player.ManaPercent >= LaneMenu.Get<Slider>("LHQPercent").CurrentValue || qTarget.CountAlliesInRange(W.Range) > 3 || player.IsZombie)
                        {
                            W.Cast(predW.CastPosition);
                        }
                    }

                    if (qTarget == null || (!qm || !Q.IsReady() || !qTarget.IsValid))
                    {
                        return false;
                    }
                    var predQ = Q2.GetPrediction(qTarget);
                    var RDPos = qTarget.ServerPosition.X -  Player.Instance.ServerPosition.X;
                    var RDPos2 = qTarget.ServerPosition.Y - Player.Instance.ServerPosition.Y;
                    var RPos = new Vector3(predQ.CastPosition.X + RDPos, predQ.CastPosition.Y + RDPos2, predQ.CastPosition.Z);
                    var RPosn = (RPos.Normalized());
                    if (!cz && predQ.HitChance >= HitChance.High)
                    {

                        if (ObjectManager.Player.Position.Distance(qTarget.ServerPosition) <= 900)
                            {
                                    Q.Cast(predQ.CastPosition);
                            }

                    }
                    else
                    {
                        Q.Cast(predQ.CastPosition);
                    }
                }
            }
            return true;
        }