示例#1
0
 public override void InitSystems(GameManager game)
 {
     foreach (int entity in _entityList)
     {
         _transform = game.Entities.GetComponentOf <GTransform>(entity);
     }
 }
示例#2
0
    static StringBuilder GetEndPositionJson(Level.GamePositions pEndPosition, ref StringBuilder pResources)
    {
        StringBuilder aEndPositionGobj = new StringBuilder("{");

        aEndPositionGobj.Append("\"name\" : \"End Position\",\n");
        aEndPositionGobj.Append("\"enabled\" : false,\n");
        aEndPositionGobj.Append("\"Components\" : [\n");
        GTransform aTransform = new GTransform();

        aTransform.Position = new position(pEndPosition.mWorldPosition.x * 64.00001f, pEndPosition.mWorldPosition.y * 64.00001f);
        aEndPositionGobj.Append(aTransform.ToString());
        aEndPositionGobj.Append(",\n");
        string  aSpGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(pEndPosition.mDisplaySprite));
        GSprite aSprite = new GSprite(pEndPosition.mDisplaySprite.rect, aSpGUID,
                                      pEndPosition.mDisplaySprite.texture.height, (int)Level.LayerTypes.Players);

        SaveAssetData(GetAssetFromGUID(aSpGUID, AssetMetaData.AssetType.TextureAsset), ref pResources);
        aEndPositionGobj.Append(aSprite.ToString() + ",\n");
        GPolygonCollider aPolygonCollider = new GPolygonCollider(true);

        aEndPositionGobj.Append(aPolygonCollider.ToString() + ",\n");
        Teleporter aTeleporter = new Teleporter();

        aEndPositionGobj.Append(aTeleporter.ToString());
        aEndPositionGobj.Append("]\n");
        aEndPositionGobj.Append("}");
        return(aEndPositionGobj);
    }
示例#3
0
 private bool checkCollision(GTransform transform, Vector3 nodePos)
 {
     //Debug.Log("NodePos "  + nodePos);
     if (Mathf.Abs(transform._position.x - nodePos.x) < 0.1f &&
         Mathf.Abs(transform._position.z - nodePos.z) < 0.1f)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#4
0
 private bool checkFullCollision(GTransform transform, Vector3 nodePos)
 {
     if (Mathf.Abs(transform._position.x - nodePos.x) < 0.1f &&
         Mathf.Abs(transform._position.z - nodePos.z) < 0.1f &&
         Mathf.Abs((transform._position.y + transform._bounds.y / 2 + 0.05f) - nodePos.y) < 1.6f)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#5
0
        public override void Update(GameManager game, float delta)
        {
            foreach (int entity in _entityList)
            {
                GAstarComponent astarComponent = game.Entities.GetComponentOf <GAstarComponent>(entity);
                GTransform      transform      = game.Entities.GetComponentOf <GTransform>(entity);
                ActionQueue     _actionQueue   = game.Entities.GetComponentOf <ActionQueue>(entity);
                Vector3         current        = astarComponent._current;
                bool            wait           = false;
                //Debug.Log("Astar value "  + astarComponent._path.ElementAt(astarComponent._index).Value);
                if (checkCollision(transform, current))
                {
                    if (!astarComponent._path.ElementAt(astarComponent._index).Value)
                    {
                        astarComponent._index++;
                        astarComponent._current = astarComponent._path.ElementAt(astarComponent._index).Key;
                    }
                }
                if (checkFullCollision(transform, current) && astarComponent._path.ElementAt(astarComponent._index).Value&& game.Entities.GetComponentOf <GMovement>(entity)._grounded)
                {
                    JumpAction a = JumpAction.Make();
                    a.Apply(game, transform.EntityID);
                    a.Recycle();
                    astarComponent._index++;
                    astarComponent._current = astarComponent._path.ElementAt(astarComponent._index).Key;
                }

                if (Mathf.Abs(transform._position.x - current.x) > 0.1f)
                {
                    MoveAction a = MoveAction.Make(current.x - transform._position.x);
                    a.Apply(game, transform.EntityID);
                    a.Recycle();
                }
                if (Mathf.Abs(transform._position.z - current.z) > 0.1f)
                {
                    //Debug.Log("Move Z " + Mathf.Sign(current.x - transform._position.x));
                    MoveZAction a = MoveZAction.Make(current.z - transform._position.z);
                    a.Apply(game, transform.EntityID);
                    a.Recycle();
                }
            }
        }
示例#6
0
    static StringBuilder GetStartPositionJson(Level.GamePositions pStartPosition, ref StringBuilder pResources, AssetMetaData pPlayer)
    {
        StringBuilder aStartPositionGobj = new StringBuilder("{\n");

        aStartPositionGobj.Append("\"name\" : \"Start Position\",\n");
        aStartPositionGobj.Append("\"Components\" : [\n");
        GTransform aTransform = new GTransform();

        aTransform.Position = new position(pStartPosition.mWorldPosition.x * 64.00001f, pStartPosition.mWorldPosition.y * 64.00001f);
        aStartPositionGobj.Append(aTransform.ToString());
        aStartPositionGobj.Append(",\n");
        PlayerSpawner aSpawner = new PlayerSpawner();

        aSpawner.mPlayerPrefabGUID = pPlayer.mGUID;
        SavePlayer(pPlayer, ref pResources);
        aStartPositionGobj.Append(aSpawner.ToString());
        aStartPositionGobj.Append("]\n");
        aStartPositionGobj.Append("}\n");
        return(aStartPositionGobj);
    }
示例#7
0
    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);
        }
    }
示例#8
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));
            }
        }
示例#9
0
    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);
    }
示例#10
0
    static StringBuilder GetGameScriptableJson(Vector2Int pPosition, GameScriptable pScriptable, ref StringBuilder pResources)
    {
        StringBuilder aGameScriptable = new StringBuilder("{\n");

        aGameScriptable.Append("\"name\" : \"" + pScriptable.mName + "\",\n");
        aGameScriptable.Append("\"Components\" : [\n");
        GTransform aTransform = new GTransform();

        aTransform.Position = new position(pPosition.x * 64.00001f, pPosition.y * 64.00001f);
        aGameScriptable.Append(aTransform.ToString() + ",\n");
        switch (pScriptable.mType)
        {
        case GameScriptable.ObjectType.SpawnFactory:
            aGameScriptable.Append(GetSpawnFactoryJson((SpawnFactory)pScriptable, ref pResources));
            break;

        case GameScriptable.ObjectType.StaticObject:
            aGameScriptable.Append(GetStaticObjectJson((StaticObject)pScriptable, ref pResources));
            break;
        }
        aGameScriptable.Append("]\n");
        aGameScriptable.Append("}");
        return(aGameScriptable);
    }
示例#11
0
 public override void Update(GameManager game, float delta)
 {
     foreach (int entity in _entityList)
     {
         GAstarComponent astarComponent = game.Entities.GetComponentOf <GAstarComponent>(entity);
         GTransform      transform      = game.Entities.GetComponentOf <GTransform>(entity);
         Node            endNode        = NodeDic[astarComponent._goal];
         if (astarComponent._active)
         {
             openList.Enqueue(NodeDic[new Vector2((int)transform._position.x, (int)-transform._position.z)], 0);
         }
         while (astarComponent._active)
         {
             Node current = openList.Dequeue();
             for (int i = 0; i < 8; i++)
             {
                 if (current.neighbours[i].value > 0)
                 {
                     if (NodeDic.ContainsKey(new Vector2(current.neighbours[i].position.x, current.neighbours[i].position.z)))
                     {
                         Node child = NodeDic[new Vector2(current.neighbours[i].position.x, current.neighbours[i].position.z)];
                         if (child == endNode)
                         {
                             astarComponent._active = false;
                             child.jump             = current.neighbours[i].jump;
                             child.parent           = current;
                             current = endNode;
                             break;
                         }
                         if (!openList.Contains(child) && !closedList.Contains(child))
                         {
                             gameObjs[new Vector2(current.position.x, current.position.z)].renderer.material.color = Color.red;
                             float dst = Vector3.Distance(child.position, endNode.position);
                             child.jump   = current.neighbours[i].jump;
                             child.parent = current;
                             child.value  = child.parent.value + current.neighbours[i].value;
                             openList.Enqueue(child, dst + child.value);
                         }
                     }
                     else
                     {
                         Debug.Log("Did not exist " + new Vector2(current.neighbours[i].position.x, current.neighbours[i].position.z));
                     }
                 }
             }
             closedList.Add(current);
             if (!astarComponent._active)
             {
                 while (current.parent != null)
                 {
                     finalList.Add(current.position, current.jump);
                     gameObjs[new Vector2(current.position.x, current.position.z)].transform.localScale   *= 4;
                     gameObjs[new Vector2(current.position.x, current.position.z)].renderer.material.color = Color.yellow;
                     current = current.parent;
                     //astarComponent._path.Add(current.position, current.jump);
                 }
                 //Sätt ihop dessa loopar
                 astarComponent._current = finalList.Last().Key;
                 for (int i = finalList.Count - 1; i >= 0; i--)
                 {
                     //finalList[finalList.ElementAt(i - 1).Key] = finalList.ElementAt(i).Value;
                     if (finalList.ElementAt(i).Value)
                     {
                         astarComponent._path.Add(finalList.ElementAt(i).Key, false);
                         astarComponent._path[finalList.ElementAt(i + 1).Key] = true;
                         Debug.Log("Fix Jump " + finalList.ElementAt(i + 1).Key);
                     }
                     else
                     {
                         astarComponent._path.Add(finalList.ElementAt(i).Key, finalList.ElementAt(i).Value);
                     }
                 }
                 astarComponent._index = 0;
                 finalList.Clear();
                 closedList.Clear();
                 openList.Clear();
             }
         }
     }
 }
示例#12
0
        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);
                }
            }
        }