private void init() { //_rigidbody = gameObject.getComponent<Rigidbody>(); _terrain = Root.instance.RootObject.getScript <Terrain>(); _transform = gameObject.transform2(); _bounds = AxisAlignedBox.FromDimensions(_transform.DerivedPosition, new Vector2(32, 48)); }
private void ongui() { var aabb = AxisAlignedBox.FromDimensions(new Vector2(0, 0), new Vector2(256, 256)); //var p = _player.transform.DerivedPosition; var worldAABB = mainCamera.worldBounds; var p0 = worldAABB.Minimum; var p1 = worldAABB.Maximum; var scale = 128f / _settings.SectorHalfSize; p0.X = Utility.Clamp(p0.X, _settings.SectorHalfSize, -_settings.SectorHalfSize) * scale; p0.Y = Utility.Clamp(p0.Y, _settings.SectorHalfSize, -_settings.SectorHalfSize) * scale; p1.X = Utility.Clamp(p1.X, _settings.SectorHalfSize, -_settings.SectorHalfSize) * scale; p1.Y = Utility.Clamp(p1.Y, _settings.SectorHalfSize, -_settings.SectorHalfSize) * scale; worldAABB.SetExtents(p0, p1); worldAABB.Center = worldAABB.Center; aabb.Center += transform.DerivedPosition; worldAABB.Center += transform.DerivedPosition; graphics.Draw(aabb, new Color(Color.Black, 0.5f)); graphics.DrawRect(aabb, new Color(Color.Green, 0.5f)); var aliens = _targets.get(Vector2.Zero, _settings.SectorSize, TargetFilters.Aliens); foreach (var alien in aliens) { var p = alien.transform.DerivedPosition * scale; graphics.DrawRect(AxisAlignedBox.FromDimensions(p + transform.DerivedPosition, Vector2.One * 2), new Color(Color.Red, 0.5f)); } graphics.DrawRect(worldAABB, new Color(Color.White, 0.5f)); }
private void fixedupdate() { var thisSprite = this.gameObject.getScript <Sprite>(); var thisaabb = AxisAlignedBox.FromDimensions(transform.DerivedPosition, thisSprite.size); var player = rootObject.find("player"); if (player != null) { var playerSprite = player.getScriptWithChildren <Sprite>(); var playeraabb = AxisAlignedBox.FromDimensions(player.transform.DerivedPosition, playerSprite.size); if (playeraabb.Intersects(thisaabb)) { var playerController = player.getScriptWithChildren <PlayerController>(); this.gameObject.destroy(); if (type == PowerUpType.Damage) { playerController.damageModifier += 0.1f; } else if (type == PowerUpType.Defense) { playerController.defenseModifier += 0.1f; } //else if (type == PowerUpType.Speed) // playerController.MaxAcceleration += 0.5f; } } }
private void queryBroadphaseAABB(CollisionQuery query, List <Collision> collisions) { if (query.flag.CheckFlags(Physics.QUERY_WORLD)) { var screenAABB = query.aabb; var wx0 = Math.Floor(screenAABB.X0 / tileSize); var wx1 = Math.Ceiling(screenAABB.X1 / tileSize); var wy0 = Math.Floor(screenAABB.Y0 / tileSize); var wy1 = Math.Ceiling(screenAABB.Y1 / tileSize); var minX = (int)Math.Max(0, wx0); var maxX = (int)Math.Min(_width.Number, wx1); var minY = (int)Math.Max(0, wy0); var maxY = (int)Math.Min(_height.Number, wy1); var hs = tileSize * Game.WORLD_SCALE * Vector2.One; //var aabb = AxisAlignedBox.FromRect(Vector2.Zero, hs); var mtv = MinimumTranslationVector.Zero; for (var y = minY; y < maxY; y++) { for (var x = minX; x < maxX; x++) { if (tiles[x, y].tileType != MapTileType.Room) { var aabb = AxisAlignedBox.FromDimensions(new Vector2(x, y) * tileSize * Game.WORLD_SCALE + hs / 2, hs); if (query.aabb.Intersects(aabb)) { collisions.Add(new Collision(Physics.QUERY_WORLD, gameObject, aabb)); } } } } } }
private void update() { if (input.WasLeftMousePressed) { var aabb = AxisAlignedBox.FromDimensions(transform.DerivedPosition, _sprite.material.textureSize); var p = mainCamera.screenToWorld(input.MousePosition); if (aabb.Intersects(p)) { gameObject.sendMessage("spriteclicked"); } } }
public static GameObject prefabCamera(this GameObject parent) { var go = parent.createChild("camera"); go.createScript <Camera>(); var trackObject = go.createScript <TrackObject>(); trackObject.objectName = "player"; trackObject.keepInBounds = AxisAlignedBox.FromDimensions(Vector2.Zero, new Vector2(300, 150)); return(go); }
public virtual void UpdateBounds() { if (boundsDirty) { abb.IsNull = true; Vector3 widthVector = Vector3.Zero; foreach (ChainSegment seg in chainSegmentList) { if (seg.head != SEGMENT_EMPTY) { for (int e = seg.head; ; ++e) { // Wrap forwards if (e == maxElementsPerChain) { e = 0; } Element elem = chainElementList[seg.start + e]; widthVector.x = widthVector.y = widthVector.z = elem.width; abb = AxisAlignedBox.FromDimensions(elem.position, widthVector * 2.0f); if (e == seg.tail) { break; } } } } // Set the current radius if (abb.IsNull) { boundingRadius = 0.0f; } else { boundingRadius = (float)Math.Sqrt(Math.Max(abb.Minimum.LengthSquared, abb.Maximum.LengthSquared)); } boundsDirty = false; } }
protected override void onInit() { inited = true; _shape = new Shape(AxisAlignedBox.FromDimensions(_offset, _size)); }
private void render() { graphics.DrawRect(19, AxisAlignedBox.FromDimensions(Vector2.Zero, SectorSize * Vector2.One), Color.Pink); }
private void fixedupdate() { if (!shape.IsNull) { var p = gameObject.transform.DerivedPosition; shape.Center = p; if (_velocity != Vector2.Zero) { var m = _velocity * Root.instance.time.deltaTime; var sweep = AxisAlignedBox.FromDimensions(shape.Center, shape.Size); sweep.Center = p + m; sweep.Merge(shape); Root.instance.RootObject.broadcast("queryBroadphaseAABB", new CollisionQuery(QUERY_WORLD, this.gameObject, sweep), broadphase); var dx = Math.Abs(m.X); var dy = Math.Abs(m.Y); var sx = Math.Sign(m.X); var sy = Math.Sign(m.Y); var px = new Vector2(sx, 0); var py = new Vector2(0, sy); while (dx > 0 || dy > 0) { if (dx > dy) { shape.Center = p + px; var collided = hasCollision(shape); if (collided && dy <= 0) { dx = 0; } if (!collided) { p.X += sx; } dx--; } else { shape.Center = p + py; var collided = hasCollision(shape); if (collided && dx <= 0) { dy = 0; } if (!collided) { p.Y += sy; } dy--; } } shape.Center = p; gameObject.transform.DerivedPosition = p; } } broadphase.Clear(); }