/// <summary> /// /// </summary> /// <param name="scene"></param> /// <param name="pos">position</param> /// <param name="owner">owner gameobject ex. cCharacter</param> /// <param name="direction">normalized vector of direction</param> public cBullet(cGameObject owner, BulletBreed breed, Vector2f pos, Vector2f direction) : base(owner.Scene, pos) { this.owner = owner; this.breed = breed; this.alive = true; this.alpha = 255.0f; // proci határozza meg, hogy milyen alaplap foglalat és milyen RAM!! this.heading = direction; this.Bounds = new AABB(); this.Bounds.SetDims(new Vector2f(1.0f, 1.0f)); this.oppositeDir = new Vector2f(-this.heading.X * breed.slugLength, -this.heading.Y * breed.slugLength); this.intersection = new Vector2f(0.0f, 0.0f); this.Bounds.SetPosByTopLeft(pos); this.velocity.X = this.heading.X * breed.startSpeed; this.velocity.Y = this.heading.Y * breed.startSpeed; orientation = AppMath.GetAngleOfVector(heading); this.sprite = new Sprite(this.breed.sprite); // bullet_yellow_sm; bullet_light_gree this.sprite.Rotation = (float)AppMath.RadianToDegress(this.orientation); }
public override void BuildVertexBuffer(float alpha) { uint multiplier = 4; uint vNum = ((uint)pool.CountActive * multiplier) + 1; //vertices.Clear(); vertices.Resize(vNum); float division = 2.0f; Vector2u uSize = this.renderStates.Texture.Size; float tSizeX = uSize.X; float tSizeY = uSize.Y; Vector2f halfDims = new Vector2f(); for (int i = 0; i < pool.CountActive; ++i) { Particle p = pool.get(i); halfDims.X = p.Dims.X / division; halfDims.Y = p.Dims.Y / division; p.ViewPos = AppMath.Interpolate(p.Pos, p.LastPos, alpha); uint vertexIndex = (uint)i * multiplier; Vector2f v0Pos = new Vector2f(p.ViewPos.X - halfDims.X, p.ViewPos.Y - halfDims.Y); Vector2f v1Pos = new Vector2f(p.ViewPos.X + halfDims.X, p.ViewPos.Y - halfDims.Y); Vector2f v2Pos = new Vector2f(p.ViewPos.X + halfDims.X, p.ViewPos.Y + halfDims.Y); Vector2f v3Pos = new Vector2f(p.ViewPos.X - halfDims.X, p.ViewPos.Y + halfDims.Y); // if want rotation included: Transform rot = Transform.Identity; rot.Rotate((float)AppMath.RadianToDegress(p.Rotation), p.ViewPos); v0Pos = rot.TransformPoint(v0Pos); v1Pos = rot.TransformPoint(v1Pos); v2Pos = rot.TransformPoint(v2Pos); v3Pos = rot.TransformPoint(v3Pos); // END of rotation code // Top-left Vertex v0 = new Vertex( v0Pos, p.Color, new Vector2f(0.0f, 0.0f) ); // Top-right Vertex v1 = new Vertex( v1Pos, p.Color, new Vector2f(tSizeX, 0.0f) ); // Bottom-right Vertex v2 = new Vertex( v2Pos, p.Color, new Vector2f(tSizeX, tSizeY) ); //Bottom-left Vertex v3 = new Vertex( v3Pos, p.Color, new Vector2f(0.0f, tSizeY) ); vertices[vertexIndex + 0] = v0; vertices[vertexIndex + 1] = v1; vertices[vertexIndex + 2] = v2; vertices[vertexIndex + 3] = v3; } }