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; }
public override void Apply(GameManager game, int owner) { GMovement movement = game.Entities.GetComponentOf <GMovement>(owner); if (movement._grounded) { movement._grounded = false; movement._gravity = 12; } }
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); }
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); }
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); } } }