コード例 #1
0
ファイル: MoveAction.cs プロジェクト: chimchim/Chilenska
        public override void Apply(GameManager game, int owner)
        {
            GMovement movement = game.Entities.GetComponentOf <GMovement>(owner);
            Vector3   P        = game.Entities.GetComponentOf <GTransform>(owner)._position;
            Vector2   B        = game.Entities.GetComponentOf <GTransform>(owner)._bounds;

            movement._targetSpeed = Mathf.Sign(_direction) * 4;
        }
コード例 #2
0
ファイル: JumpAction.cs プロジェクト: chimchim/Chilenska
        public override void Apply(GameManager game, int owner)
        {
            GMovement movement = game.Entities.GetComponentOf <GMovement>(owner);

            if (movement._grounded)
            {
                movement._grounded = false;
                movement._gravity  = 12;
            }
        }
コード例 #3
0
 private void InjectToWoW()
 {
     ObjectList = new GObjectList(pid.ToInt32());
     //Get LocalPlayer
     localPlayer = ObjectList.LocalPlayer;
     //Load move
     move                 = new GMovement(ObjectList, this);
     move.sendtext       += new StringStatutTransfertEventHandler(SendConsole);
     Objectlist.sendtext += new StringStatutTransfertEventHandler(SendConsole);
 }
コード例 #4
0
ファイル: GameUnity.cs プロジェクト: chimchim/Chilenska
    private void createAI(GameManager game)
    {
        for (int i = 0; i < 1; i++)
        {
            Entity ent = new Entity();
            game.Entities.addEntity(ent);
            ent.AddComponent(GTransform.Make(ent.ID, Vector3.zero, new Vector2(0.4f, 1f)));
            ent.AddComponent(GRawInput.Make(ent.ID));
            ent.AddComponent(ActionQueue.Make(ent.ID));
            ent.AddComponent(GCollisionMask.Make(ent.ID));
            ent.AddComponent(GMovement.Make(ent.ID));
            ent.AddComponent(GAstarComponent.Make(ent.ID));
            ent.AddComponent(GBoxCollider2D.Make(ent.ID, new Vector2(0.2f, 0.5f),
                                                 new Vector2(0, -0.1f), new Vector2(0.2f, 0.5f)));

            GameObject clone = Instantiate(trans, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
            entityDic.Add(ent.ID, clone.transform);
            game.Systems.AddEntity(1, ent.ID);
            game.Systems.AddEntity(2, ent.ID);
            game.Systems.AddEntity(3, ent.ID);
        }
    }
コード例 #5
0
        public override void Apply(GameManager game, int owner)
        {
            GMovement    movement  = game.Entities.GetComponentOf <GMovement>(owner);
            GTransform   transform = game.Entities.GetComponentOf <GTransform>(owner);
            RaycastHit2D hit;
            float        speed   = 4 * Time.deltaTime * Mathf.Sign(_dir);
            Vector3      p       = transform._position;
            Vector2      s       = transform._bounds;
            bool         canMove = true;

            for (int i = 0; i < 2; i++)
            {
                float x = (p.x - s.x / 2) + s.x * i;
                float y = p.y - s.y / 2;

                Ray ray1 = new Ray(new Vector3(x, y, p.z), new Vector3(0, 0, 1));
                Debug.DrawRay(ray1.origin, ray1.direction);
                if (Physics.Raycast(new Vector3(x, y, p.z), new Vector3(0, 0, speed), Mathf.Abs(speed) + 0.05f))
                {
                    canMove = false;
                }
            }
            for (int i = 0; i < 2; i++)
            {
                float x = (p.x - s.x / 2) + s.x * i;
                float y = p.y + s.y / 2;

                Ray ray1 = new Ray(new Vector3(x, y, p.z), new Vector3(0, 0, 1));
                Debug.DrawRay(ray1.origin, ray1.direction);
                if (Physics.Raycast(new Vector3(x, y, p.z), new Vector3(0, 0, speed), Mathf.Abs(speed) + 0.05f))
                {
                    canMove = false;
                }
            }
            if (canMove)
            {
                transform._position += (new Vector3(0, 0, speed));
            }
        }
コード例 #6
0
ファイル: GameUnity.cs プロジェクト: chimchim/Chilenska
    void Start()
    {
        Entity ent = new Entity();

        game.Entities.addEntity(ent);
        ent.AddComponent(GTransform.Make(ent.ID, Vector3.zero, new Vector2(0.4f, 1f)));
        ent.AddComponent(GRawInput.Make(ent.ID));
        ent.AddComponent(ActionQueue.Make(ent.ID));
        ent.AddComponent(GCollisionMask.Make(ent.ID));
        ent.AddComponent(GMovement.Make(ent.ID));
        ent.AddComponent(GBoxCollider2D.Make(ent.ID, new Vector2(0.2f, 0.5f),
                                             new Vector2(0, -0.1f), new Vector2(0.2f, 0.5f)));
        GameObject clone = Instantiate(trans, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;

        camera.transform.parent = clone.transform;
        entity = ent.ID;
        entityDic.Add(ent.ID, clone.transform);
        game.Systems.CreateSystems();
        game.Systems.AddEntity(0, ent.ID);
        game.Systems.AddEntity(1, ent.ID);
        game.Initiate();
        createAI(game);
    }
コード例 #7
0
ファイル: GPhysicsSystem.cs プロジェクト: chimchim/Chilenska
        public override void Update(GameManager game, float delta)
        {
            foreach (int entity in _entityList)
            {
                GMovement movement = game.Entities.GetComponentOf <GMovement>(entity);
                if (movement._grounded)
                {
                    movement._gravity = 0;
                }

                movement._gravity -= 20 * Time.deltaTime;
                movement._grounded = false;

                GTransform transform = game.Entities.GetComponentOf <GTransform>(entity);
                movement._currentSpeed = IncrementTowards(movement._currentSpeed, movement._targetSpeed, acceleration);
                movement._targetSpeed  = 0;
                RaycastHit hit;
                float      deltaX          = movement._currentSpeed * Time.deltaTime;
                float      deltaY          = movement._gravity * Time.deltaTime;
                Vector2    s               = transform._bounds;
                Vector3    p               = transform._position;
                Vector2    finalTransform1 = Vector2.zero;
                Vector2    direction       = Vector2.zero;

                if (deltaX <= 0)
                {
                    for (int i = 2; i > -1; i--)
                    {
                        float dir = Mathf.Sign(deltaY);
                        float x   = (p.x - s.x / 2) + s.x / 2 * i;
                        float y   = p.y + s.y / 2 * dir;

                        Ray ray = new Ray(new Vector3(x, y, p.z), new Vector2(0, dir));
                        Debug.DrawRay(ray.origin, ray.direction);


                        if (Physics.Raycast(new Vector3(x, y, p.z), new Vector2(0, dir), out hit, Mathf.Abs(deltaY + (dir * _skin)), 1 << 11))
                        {
                            direction = Vector3.Cross(hit.normal, hit.collider.transform.forward);

                            if (hit.normal.y < 0.3f && hit.normal.y > 0.0f)
                            {
                                if (direction.y < 0)
                                {
                                    deltaX = -(direction.x * deltaY + deltaX);
                                    deltaY = (-direction.y * deltaY);
                                }
                                else
                                {
                                    deltaX = direction.x * deltaY + deltaX;
                                    deltaY = direction.y * deltaY;
                                }
                            }
                            else
                            {
                                transform._position = new Vector3(transform._position.x, hit.point.y + (-dir * (_skin + 0.5f)), transform._position.z);
                                finalTransform1     = new Vector2(direction.x, direction.y);
                                movement._grounded  = true;
                            }
                            break;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < 3; i++)
                    {
                        float dir = Mathf.Sign(deltaY);
                        float x   = (p.x - s.x / 2) + s.x / 2 * i; // Left, centre and then rightmost point of collider
                        float y   = p.y + s.y / 2 * dir;           // Bottom of collider

                        Ray ray = new Ray(new Vector3(x, y, p.z), new Vector2(0, dir));
                        Debug.DrawRay(ray.origin, ray.direction);
                        //hit = Physics.Raycast(new Vector2(x, y), new Vector2(0, dir), out hit, Mathf.Abs(deltaY + (dir * _skin)), 1 << 11);

                        if (Physics.Raycast(new Vector3(x, y, p.z), new Vector2(0, dir), out hit, Mathf.Abs(deltaY + (dir * _skin)), 1 << 11))
                        {
                            direction = Vector3.Cross(hit.normal, hit.collider.transform.forward);
                            if (hit.normal.y < 0.3f && hit.normal.y > 0.0f)
                            {
                                deltaX = direction.x * deltaY - deltaX;
                                deltaY = direction.y * deltaY;
                            }
                            else
                            {
                                transform._position = new Vector3(transform._position.x, hit.point.y + (-dir * (_skin + 0.5f)), transform._position.z);
                                finalTransform1     = new Vector2(direction.x, direction.y);
                                movement._grounded  = true;
                            }
                            break;
                        }
                    }
                }
                if (!movement._grounded)
                {
                    Vector2 finalTransform = new Vector2(0, deltaY);
                    finalTransform1 = new Vector2(deltaX, deltaY);
                }
                else
                {
                    finalTransform1 = new Vector2(direction.x * deltaX, direction.y * deltaX);
                }
                Vector2 newdir = Vector2.zero;
                bool    hited  = false;
                for (int i = 0; i < 3; i++)
                {
                    float dir = Mathf.Sign(finalTransform1.x);
                    float x   = p.x + s.x / 2 * dir;
                    float y   = p.y - s.y / 2 + s.y / (3 - 1) * i;

                    Ray ray = new Ray(new Vector3(x, y, p.z), new Vector2(0, dir));

                    Debug.DrawRay(ray.origin, finalTransform1.normalized);
                    // hit = Physics2D.Raycast(new Vector2(x, y), finalTransform1.normalized, finalTransform1.magnitude + _skin, 1 << 11, transform._position.z - 2, transform._position.z + 2);
                    if (Physics.Raycast(new Vector3(x, y, p.z), finalTransform1.normalized, out hit, finalTransform1.magnitude + _skin, 1 << 11))
                    {
                        if (i == 0 && 0.3f < hit.normal.y)
                        {
                            movement._grounded = true;
                            direction          = Vector3.Cross(hit.normal, hit.collider.transform.forward);
                            newdir             = direction * deltaX;
                        }
                        else
                        {
                            if (movement._grounded && hit.normal.y < 0.3f)
                            {
                                movement._currentSpeed = 0;
                                deltaY = 0;
                            }

                            newdir = new Vector2(0, deltaY);
                        }
                        hited = true;
                    }
                }

                transform._position += new Vector3(newdir.x, newdir.y, 0);
                if (!hited)
                {
                    transform._position += new Vector3(finalTransform1.x, finalTransform1.y, 0);
                }
            }
        }