public override void InitSystems(GameManager game) { foreach (int entity in _entityList) { _transform = game.Entities.GetComponentOf <GTransform>(entity); } }
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); }
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); } }
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); } }
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(); } } }
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); }
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); } }
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)); } }
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); }
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); }
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(); } } } }
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); } } }