Exemple #1
0
        protected override bool MakeResult(Character cc)
        {
            if (cc == null)
            {
                return(false);
            }
            EffectUnit unit = null;

            if (World)
            {
                Transform p = cc.Avatar.GetBindTransform(Bind);
                unit = GTWorld.Instance.Ect.LoadEffect(ID, 0, Retain);
                unit.CacheTransform.parent           = p;
                unit.CacheTransform.localPosition    = Offset;
                unit.CacheTransform.localEulerAngles = Euler;
                unit.CacheTransform.parent           = null;
                unit.CacheTransform.localScale       = Scale;
            }
            else
            {
                Transform p = cc.Avatar.GetBindTransform(Bind);
                unit = GTWorld.Instance.Ect.LoadEffect(ID, 0, KTransform.Create(Offset, Euler, Scale), p, Retain);
            }
            unit.Release(Duration);
            return(true);
        }
Exemple #2
0
    public EffectUnit(int id, ulong guid, KTransform data, Transform parent, bool retain)
    {
        this.ID     = id;
        this.GUID   = guid > 0 ? guid : GTGUID.NewGUID();
        this.Parent = parent;
        this.Retain = retain;
        this.Cfg    = ReadCfgEffect.GetDataById(id);
        if (Cfg == null)
        {
            Debug.LogError("不存在特效ID =" + ID);
            return;
        }
        GameObject go = GTPoolManager.Instance.GetObject(Cfg.Path);

        if (go == null)
        {
            go = new GameObject(ID.ToString());
        }
        this.CacheTransform = go.transform;
        NGUITools.SetLayer(go, GTLayer.LAYER_EFFECT);
        this.CacheTransform.parent           = this.Parent != null ? Parent : null;
        this.CacheTransform.localScale       = data.Scale;
        this.CacheTransform.localEulerAngles = data.Euler;
        this.CacheTransform.localPosition    = data.Pos;
        this.TriggerObject = go.GET <ETriggerObject>();
    }
Exemple #3
0
        public void TestPointRotation1()
        {
            KVector2   point = new KVector2(1, 0);
            KTransform tx    = new KTransform(KVector2.Zero, (float)(System.Math.PI / 2.0), new KVector2(1));

            Assert.AreEqual(new KVector2(0, -1), tx.TransformPointWL(point));
        }
    public Character AddMainPlayer(KTransform bornData)
    {
        XCharacter data = RoleModule.Instance.GetMainPlayer();

        Main = AddActor(data.Id, EBattleCamp.A, EActorType.PLAYER, bornData, data, true);
        return(Main);
    }
Exemple #5
0
 protected override bool Trigger()
 {
     base.Trigger();
     if (World)
     {
         Transform p = Skill.Caster.Avatar.GetBindTransform(CasterBind);
         Unit = GTWorld.Instance.Ect.LoadEffect(ID, 0, Retain);
         Unit.CacheTransform.parent           = p;
         Unit.CacheTransform.localPosition    = Offset;
         Unit.CacheTransform.localEulerAngles = Euler;
         Unit.CacheTransform.parent           = null;
         Unit.CacheTransform.localScale       = Scale;
         Unit.CacheTransform.localEulerAngles = Euler + Skill.Caster.Euler;
     }
     else
     {
         Transform p = Skill.Caster.Avatar.GetBindTransform(CasterBind);
         Unit = GTWorld.Instance.Ect.LoadEffect(ID, 0, KTransform.Create(Offset, Euler, Scale), p, Retain);
     }
     for (int i = 0; i < Children.Count; i++)
     {
         Children[i].ApplyCenter   = Unit.CacheTransform;
         Children[i].ApplyHitPoint = Unit.Pos;
         Children[i].ApplyHitDir   = Vector3.zero;
     }
     Unit.Release(Duration);
     return(true);
 }
    public Character AddNpc(int id, KTransform bornData)
    {
        Character cc = AddActorNoneSync(id, EBattleCamp.C, EActorType.NPC, bornData);

        cc.EnableAI(true);
        return(cc);
    }
Exemple #7
0
        public void TestDir1()
        {
            KVector2   dir = new KVector2(1, 0);
            KTransform tx  = new KTransform(KVector2.Zero, 0, new KVector2(5, 4));

            Assert.AreEqual(new KVector2(5, 0), tx.TransformDirLW(dir));
        }
Exemple #8
0
        public void TestNormal()
        {
            KVector2   dir = new KVector2(1, 0);
            KTransform tx  = new KTransform(KVector2.Zero, (float)(System.Math.PI), new KVector2(5));

            Assert.AreEqual(tx.TransformNormalLW(dir), new KVector2(-1, 0));
        }
Exemple #9
0
        public void TestWorldToLocal()
        {
            KVector2   point = new KVector2(31, -4);
            KTransform tx    = new KTransform(KVector2.One, (System.Math.PI / 2.0), new KVector2(5));

            Assert.AreEqual(new KVector2(-1, -6), tx.TransformPointWL(point));
        }
Exemple #10
0
        public void TestLocalToWorld()
        {
            KVector2   point = new KVector2(-1, -6);
            KTransform tx    = new KTransform(KVector2.One, (System.Math.PI / 2), new KVector2(5));

            Assert.AreEqual(new KVector2(-29, 6), tx.TransformPointLW(point));
        }
Exemple #11
0
        public void TestDir()
        {
            KVector2   dir = new KVector2(1, 0);
            KTransform tx  = new KTransform(KVector2.Zero, (float)(System.Math.PI), new KVector2(5));

            Assert.AreEqual(new KVector2(-5, 0), tx.TransformDirLW(dir));
        }
        public void TestOverlapSquareAndTrangle1()
        {
            KTransform t = new KTransform(KVector2.Zero, 0, KVector2.One);

            KVertices vA = new KVertices()
            {
                new KVector2(0f, 0f + 2),
                new KVector2(1f, -2f + 2),
                new KVector2(-1f, -2f + 2),
            };
            KVertices vB = new KVertices()
            {
                new KVector2(0.5f, 0.5f),
                new KVector2(0.5f, -0.5f),
                new KVector2(-0.5f, -0.5f),
                new KVector2(-0.5f, 0.5f),
            };

            vA.Reverse();
            vB.Reverse();

            Rigidbody sqr = BodyFactory.CreatePolygon(t, new MassData(1, 1), vB);
            Rigidbody tri = BodyFactory.CreatePolygon(t, new MassData(1, 1), vA);

            Fixture fA = new Fixture(sqr, sqr.Colliders[0]);
            Fixture fB = new Fixture(tri, tri.Colliders[0]);

            Contact c = new Contact(fA, fB);

            Assert.AreEqual(CollisionDetection.Collision(ref c), true);
        }
Exemple #13
0
        public void TestPointTranslation()
        {
            KVector2   point = new KVector2(2, 3);
            KTransform tx    = new KTransform(new KVector2(-5, -2), 0, new KVector2(1));

            Assert.AreEqual(new KVector2(-3, 1), tx.TransformPointLW(point));
        }
Exemple #14
0
        public void TestPointScale()
        {
            KVector2   point = new KVector2(1, 0);
            KTransform tx    = new KTransform(KVector2.Zero, 0, new KVector2(5));

            Assert.AreEqual(new KVector2(5, 0), tx.TransformPointLW(point));
        }
Exemple #15
0
    private void ShowModel()
    {
        if (mPlayer != null)
        {
            CharacterManager.Instance.DelActor(mPlayer);
        }
        KTransform param = KTransform.Default;

        DRole roleDB = mRoleDBList[mRoleIndex];
        int   id     = roleDB.Id;

        mPlayer = CharacterManager.Instance.AddRole(id, param);
        mPlayer.EnableCharacter(false);
        mPlayer.EnableRootMotion(false);
        mPlayer.Action.Play("idle");
        if (roleDB.DisplayWeapon > 0)
        {
            mPlayer.Avatar.ChangeAvatar(8, roleDB.DisplayWeapon);
        }
        mPlayer.CacheTransform.localPosition    = mRoleModelPos;
        mPlayer.CacheTransform.localEulerAngles = mRoleModelEuler;
        GameObject go = mPlayer.Obj;

        go.transform.position    = mRoleModelPos;
        go.transform.eulerAngles = mRoleModelEuler;
        go.SetActive(true);
    }
Exemple #16
0
    public EffectUnit LoadEffect(int id, ulong guid, KTransform data, Transform parent, bool retain = true)
    {
        EffectUnit tab = new EffectUnit(id, guid, data, parent, retain);

        Effects[tab.GUID] = tab;
        return(tab);
    }
Exemple #17
0
    public static KTransform Create(XTransform data)
    {
        KTransform d = new KTransform();

        d.Pos   = new Vector3(data.Pos.x, data.Pos.y, data.Pos.z);
        d.Euler = new Vector3(data.Forward.x, data.Forward.y, data.Forward.z);
        d.Scale = Vector3.one;
        return(d);
    }
Exemple #18
0
        //FIXME: Bad CircleVsCircle test

        private static bool CircleVsCircle(ref Contact contact)
        {
            Circle a = (Circle)contact.FixtureA.Collider;
            Circle b = (Circle)contact.FixtureB.Collider;
            //In the local worl A is a unit circle and B is an ellipse

            KVector2 cB    = a.Transform.TransformPointWL(b.Transform.TransformPointLW(b.LPosition));
            KVector2 axisA = a.Transform.TransformDirWL(b.Transform.TransformDirLW(KVector2.XPos));
            KVector2 axisB = a.Transform.TransformDirWL(b.Transform.TransformDirLW(KVector2.YPos));

            KTransform kTransform = new KTransform(cB, a.Transform.Rotation + b.Transform.Rotation, KVector2.One);
            KVector2   P          = kTransform.TransformPointWL(a.LPosition);

            double t = Math.PI / 4f;

            KVector2 scale = new KVector2(axisA.Length(), axisB.Length());

            KVector2 potCp = new KVector2();

            for (int i = 0; i < 50; i++)
            {
                potCp = new KVector2(scale.X * Math.Cos(t), scale.Y * Math.Sin(t));

                double   ex = (scale.X * scale.X) - (scale.Y * scale.Y) * Math.Pow(Math.Cos(t), 3) / scale.X;
                double   ey = (scale.Y * scale.Y) - (scale.X * scale.X) * Math.Pow(Math.Sin(t), 3) / scale.Y;
                KVector2 e  = new KVector2(ex, ey);

                KVector2 r       = potCp - e;
                KVector2 q       = P - e;
                double   delta_c = r.Length() * Math.Asin((r.X * q.Y - r.Y * q.X) / (r.Length() * q.Length()));
                double   delta_t = delta_c / Math.Sqrt(scale.LengthSquared() - potCp.LengthSquared());

                t += delta_t;
                t += Math.Min(Math.PI / 2, Math.Max(0, t));
            }

            KVector2 wPos = a.Transform.TransformPointLW(kTransform.TransformPointLW(potCp));
            KVector2 cDir = P - potCp;
            KVector2 wDir = b.Transform.TransformDirLW(KVector2.Normalize(cDir) * (1 - cDir.Length()));

            if (wDir.Length() >= 1)
            {
                return(false);
            }

            ContactPoint cp = new ContactPoint
            {
                WPosition    = wPos,
                WPenetration = wDir.Length()
            };

            contact.Manifold.WNormal          = KVector2.Normalize(wDir);
            contact.Manifold.ContactPoints[0] = cp;
            contact.Manifold.Count            = 1;

            return(true);
        }
Exemple #19
0
 IEnumerator AddNpc()
 {
     for (int i = 0; i < m_Config.Npcs.Count; i++)
     {
         LvlNpc data = m_Config.Npcs[i];
         CharacterManager.Instance.AddNpc(data.Id, KTransform.Create(data.Pos, data.Euler, data.Scale));
         yield return(null);
     }
 }
Exemple #20
0
    public static KTransform Create(Vector3 pos, Vector3 angle, Vector3 scale)
    {
        KTransform data = new KTransform();

        data.Pos   = pos;
        data.Euler = angle;
        data.Scale = scale;
        return(data);
    }
Exemple #21
0
    private void InitModel()
    {
        KTransform param  = KTransform.Create(Vector3.zero, Vector3.zero);
        Camera     camera = GTCameraManager.Instance.MainCamera;

        camera.transform.position    = new Vector3(0.2214f, 1.5794f, 41.2714f);
        camera.transform.eulerAngles = new Vector3(-23.7111f, -179.525f, 0.01245f);
        camera.fieldOfView           = 46.6f;
        camera.renderingPath         = RenderingPath.DeferredLighting;
    }
Exemple #22
0
 IEnumerator AddMonster()
 {
     for (int i = 0; i < m_Config.Monsters.Count; i++)
     {
         LvlMonster mm = m_Config.Monsters[i];
         KTransform bd = KTransform.Create(mm.Pos, mm.Euler);
         CharacterManager.Instance.AddMonster(mm.Id, bd);
         yield return(null);
     }
 }
Exemple #23
0
        public void TestFindIncidentFace1()
        {
            KTransform t1 = new KTransform(KVector2.Zero, 0, KVector2.One);
            KTransform t2 = new KTransform(KVector2.Zero, 0f, KVector2.One);

            KVertices vA = new KVertices()
            {
                new KVector2(0f, .5f),
                new KVector2(1f, 2f),
                new KVector2(-1f, 2f),
            };
            KVertices vB = new KVertices()
            {
                new KVector2(-1, -1),
                new KVector2(1, -1),
                new KVector2(1, 1),
                new KVector2(-1, 1),
            };

            Polygon a = new Polygon(vA);

            a.Transform = t1;
            Polygon b = new Polygon(vB);

            b.Transform = t2;


            CollisionDetection.SeparationSAT(a, b, out int indexA, out double separationA);

            CollisionDetection.SeparationSAT(b, a, out int indexB, out double separationB);

            Polygon refPoly;
            Polygon incidentPoly;

            Face refFace;
            Face incidentFace;

            if (separationB > separationA + Config.EpsilonsFloat)
            {
                refPoly      = b;
                refFace      = b.ComputeFace(indexB);
                incidentPoly = a;
                CollisionDetection.FindIncidentFace(incidentPoly, -refFace.WNormal, indexA, out incidentFace);
            }
            else
            {
                refPoly      = a;
                refFace      = a.ComputeFace(indexA);
                incidentPoly = b;
                CollisionDetection.FindIncidentFace(incidentPoly, -refFace.WNormal, indexB, out incidentFace);
            }

            //Assert.AreEqual(new KVector2(-2, 3), output[0]);
            //Assert.AreEqual(new KVector2(0.5f, 0.5f), output[1]);
        }
Exemple #24
0
 public Rigidbody(List <Collider> shapes, MassData massData, KTransform transform)
 {
     State = new State
     {
         Transform = transform
     };
     Colliders = shapes;
     MassData  = massData;
     MassData.ComputeCenterOfMass(Colliders);
     Materiel = new PhysicMateriel(0.5f, 1f);
 }
    public Character AddActor(int id, EBattleCamp camp, EActorType type, KTransform bornData, XCharacter data, bool isMain = false)
    {
        Character cc = new Character(id, GTGUID.NewGUID(), type, camp, isMain);

        bornData.Pos = GTTools.NavSamplePosition(bornData.Pos);
        cc.Load(bornData);
        cc.SyncData(data, ESyncDataType.TYPE_ALL);
        cc.CacheTransform.parent = transform;
        Characters.Add(cc);
        return(cc);
    }
Exemple #26
0
        public State()
        {
            Transform        = new KTransform();
            Velocity         = KVector2.Zero;
            ForcesAccumulate = KVector2.Zero;

            AngVelocity       = 0f;
            TorquesAccumulate = 0f;

            ForceGenerators = new Dictionary <string, IForceGenerator>();
        }
Exemple #27
0
        public void TestLWAndWL()
        {
            KTransform tx = new KTransform(KVector2.Zero, (float)(System.Math.PI / 2.0), new KVector2(1));


            KTransform.ComputeLocalToWorld(tx, out KMatrix3x3Opti A);
            KTransform.ComputeWorldToLocal(tx, out KMatrix3x3Opti IA);
            KMatrix3x3Opti mat = (A * IA);

            Assert.IsTrue((A * IA).IsIdentity);
        }
Exemple #28
0
        public static Rigidbody CreateRectangleBody(KTransform tx, MassData massData, float hWidth, float hHeight)
        {
            KVertices rect = new KVertices
            {
                new KVector2(-hWidth, -hHeight),
                new KVector2(-hWidth, hHeight),
                new KVector2(hWidth, hHeight),
                new KVector2(hWidth, -hHeight)
            };

            return(new Rigidbody(new Polygon(rect), massData, tx));
        }
Exemple #29
0
        IEnumerator DoSummon()
        {
            for (int i = 0; i < Count; i++)
            {
                yield return(new WaitForSeconds(Interval));

                Vector3    bornPoint = GTTools.RandomOnCircle(Skill.Caster.Pos, MinRadius, MaxRadius);
                Vector3    bornEuler = Vector3.zero;
                KTransform kt        = KTransform.Create(bornPoint, bornEuler);
                CharacterManager.Instance.AddActorNoneSync(Id, Skill.Caster.Camp, ActorType, kt);
            }
        }
Exemple #30
0
        IEnumerator AddMainPlayer()
        {
            int id = GTGlobal.CurPlayerID;

            if (m_Config.A == null)
            {
                yield break;
            }
            KTransform bornData = KTransform.Create(m_Config.A.Pos, m_Config.A.Euler);

            CharacterManager.Instance.AddMainPlayer(bornData);
            yield return(null);
        }