void ICmpInitializable.OnInit(Component.InitContext context) { if (context == InitContext.Activate) { // Retrieve eye object references and initialize it GameObject eyeObject = this.GameObj.ChildByName("Eye"); this.eye = eyeObject != null?eyeObject.GetComponent <AnimSpriteRenderer>() : null; if (this.eye != null) { this.eye.AnimLoopMode = AnimSpriteRenderer.LoopMode.FixedSingle; this.eye.AnimDuration = 1.0f; this.eye.AnimTime = this.eyeOpenValue; } // Retrieve spike references GameObject[] spikeObj = new GameObject[4]; spikeObj[0] = this.GameObj.ChildByName("SpikeTopRight"); spikeObj[1] = this.GameObj.ChildByName("SpikeBottomRight"); spikeObj[2] = this.GameObj.ChildByName("SpikeBottomLeft"); spikeObj[3] = this.GameObj.ChildByName("SpikeTopLeft"); this.spikes = new SpriteRenderer[spikeObj.Length]; for (int i = 0; i < spikeObj.Length; i++) { this.spikes[i] = spikeObj[i] != null ? spikeObj[i].GetComponent <SpriteRenderer>() : null; } } }
void ICmpInitializable.OnInit(Component.InitContext context) { if (context == InitContext.Activate && DualityApp.ExecContext != DualityApp.ExecutionContext.Editor) { AnimSpriteRenderer r = this.GameObj.Renderer as AnimSpriteRenderer; SoundEmitter s = this.GameObj.GetComponent <SoundEmitter>(); Transform t = this.GameObj.Transform; r.AnimDuration = MathF.RoundToInt(0.4f * r.AnimDuration * MathF.Rnd.NextFloat(0.8f, 1.25f) * MathF.Sqrt(intensity)); t.RelativeScale *= MathF.Sqrt(intensity); t.RelativeAngle = MathF.Rnd.NextFloat(MathF.RadAngle360); t.RelativeVel = new Vector3(MathF.Rnd.NextVector2(1.0f)); ContentRef <Sound> soundRes = ContentRef <Sound> .Null; switch (MathF.Rnd.Next(5)) { case 0: soundRes = GameRes.Data.Sound.Explo1_Sound; break; case 1: soundRes = GameRes.Data.Sound.Explo2_Sound; break; case 2: soundRes = GameRes.Data.Sound.Explo3_Sound; break; case 3: soundRes = GameRes.Data.Sound.Explo4_Sound; break; case 4: soundRes = GameRes.Data.Sound.Explo5_Sound; break; } SoundEmitter.Source source = new SoundEmitter.Source(soundRes, false); source.Volume = MathF.Rnd.NextFloat(0.9f, 1.15f) * MathF.Sqrt(intensity); source.Pitch = MathF.Rnd.NextFloat(0.8f, 1.25f) / MathF.Sqrt(intensity); source.Paused = false; s.Sources.Add(source); } }
public override bool Convert(ConvertOperation convert) { List <object> results = new List <object>(); List <Material> availData = convert.Perform <Material>().ToList(); // Generate objects foreach (Material mat in availData) { if (convert.IsObjectHandled(mat)) { continue; } Texture mainTex = mat.MainTexture.Res; GameObject gameobj = convert.Result.OfType <GameObject>().FirstOrDefault(); if (mainTex == null || mainTex.AnimFrames == 0) { SpriteRenderer sprite = convert.Result.OfType <SpriteRenderer>().FirstOrDefault(); if (sprite == null && gameobj != null) { sprite = gameobj.GetComponent <SpriteRenderer>(); } if (sprite == null) { sprite = new SpriteRenderer(); } sprite.SharedMaterial = mat; if (mainTex != null) { sprite.Rect = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight); } convert.SuggestResultName(sprite, mat.Name); results.Add(sprite); } else { AnimSpriteRenderer sprite = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault(); if (sprite == null && gameobj != null) { sprite = gameobj.GetComponent <AnimSpriteRenderer>(); } if (sprite == null) { sprite = new AnimSpriteRenderer(); } sprite.SharedMaterial = mat; sprite.Rect = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth / mainTex.AnimCols, mainTex.PixelHeight / mainTex.AnimRows); sprite.AnimDuration = 5.0f; sprite.AnimFrameCount = mainTex.AnimFrames; convert.SuggestResultName(sprite, mat.Name); results.Add(sprite); } convert.MarkObjectHandled(mat); } convert.AddResult(results); return(false); }
public override bool Convert(ConvertOperation convert) { if (convert.Result.OfType <ICmpRenderer>().Any()) { return(false); } List <object> results = new List <object>(); List <AtlasViewer.TabItemInfo> availData = convert.Perform <AtlasViewer.TabItemInfo>().ToList(); foreach (var sprite in availData) { GameObject gameobj = convert.Result.OfType <GameObject>().FirstOrDefault(); AnimSpriteRenderer renderer = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault(); if (renderer == null) { renderer = new AnimSpriteRenderer(); if (sprite.Item.Indexes.Length > 1) { renderer.AnimDuration = (0.1f * sprite.Item.Indexes.Length); renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.Loop; } else { renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.FixedSingle; } renderer.CustomFrameSequence = sprite.Item.Indexes.ToList(); var rect = sprite.Pixmap.Res.Atlas[sprite.Item.Indexes[0]]; renderer.Rect = new Rect(-rect.W / 2, -rect.H / 2, rect.W, rect.H); var mat = this.FindMatchingResources <Pixmap, Material>(sprite.Pixmap.Res, (s, t) => t.MainTexture.Res?.BasePixmap == s).FirstOrDefault(); if (mat == null) { var tex = this.FindMatchingResources <Pixmap, Texture>(sprite.Pixmap.Res, (s, t) => t.BasePixmap == s).FirstOrDefault(); if (tex == null) { string texPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Texture>()); tex = new Texture(sprite.Pixmap); tex.Save(texPath); } string matPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Material>()); mat = new Material() { MainTexture = tex }; mat.Save(matPath); } renderer.SharedMaterial = mat; results.Add(renderer); } convert.SuggestResultName(renderer, sprite.Key.Replace('/', '_')); convert.MarkObjectHandled(sprite); } convert.AddResult(results); return(false); }
public void OnInit(InitContext context) { if (context != InitContext.Activate) { return; } spriteRenderer = GameObj.GetComponent <AnimSpriteRenderer>(); }
void ICmpUpdatable.OnUpdate() { AnimSpriteRenderer r = this.GameObj.Renderer as AnimSpriteRenderer; SoundEmitter s = this.GameObj.GetComponent <SoundEmitter>(); if (!r.IsAnimationRunning && s.Sources.All(src => src.Instance == null || src.Instance.Disposed)) { this.GameObj.DisposeLater(); } }
void ICmpInitializable.OnInit(InitContext context) { if (context == InitContext.Activate) { float posBrightness = 0.25f + 0.75f * (500.0f / MathF.Abs(this.GameObj.Transform.Pos.Z - 0.0f)); AnimSpriteRenderer sprite = this.GameObj.GetComponent <AnimSpriteRenderer>(); sprite.AnimTime = MathF.Rnd.NextFloat(0.0f, sprite.AnimDuration); sprite.ColorTint = new ColorRgba(posBrightness); this.turnSpeed = MathF.Rnd.NextFloat(-0.01f, 0.01f); this.velocity = new Vector3(MathF.Rnd.NextVector2(1.0f)); this.GameObj.Transform.Scale = 1.0f + (this.GameObj.Transform.Pos.Z / 2000.0f); } }
public static string GetRmlMarkup(this AnimSpriteRenderer renderer) { var tex = renderer?.SharedMaterial.Res?.MainTexture.Res; if (tex == null || tex.BasePixmap.Res == null) { return(""); } var texPath = tex.Path; var atlas = tex.BasePixmap.Res.Atlas; if (atlas == null || atlas.Count <= 0) { return($"<img source=\"{texPath}\" />"); } var rect = atlas[0]; return($"<img source=\"{texPath}\" coords=\"{rect.X}px, {rect.Y}px, {rect.RightX}px, {rect.BottomY}px\"/>"); }
public void OnInit(InitContext context) { if (Sound != null) { DualityApp.Sound.PlaySound(Sound); } if (Animation != null) { _renderer = GameObj.GetComponent <AnimSpriteRenderer>(); _renderer.SharedMaterial = Animation; _renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.Once; _renderer.AnimFirstFrame = 1; _renderer.AnimFrameCount = 5; _renderer.AnimDuration = 2f; } }
public override bool Convert(ConvertOperation convert) { // If we already have a renderer in the result set, consider generating // another one to be not the right course of action. if (convert.Result.OfType <ICmpRenderer>().Any()) { return(false); } List <object> results = new List <object>(); List <Material> availData = convert.Perform <Material>().ToList(); // Generate objects foreach (Material mat in availData) { if (convert.IsObjectHandled(mat)) { continue; } Texture mainTex = mat.MainTexture.Res; Pixmap basePixmap = (mainTex != null) ? mainTex.BasePixmap.Res : null; GameObject gameobj = convert.Result.OfType <GameObject>().FirstOrDefault(); if (mainTex == null || basePixmap == null || basePixmap.AnimFrames == 0) { SpriteRenderer sprite = convert.Result.OfType <SpriteRenderer>().FirstOrDefault(); if (sprite == null && gameobj != null) { sprite = gameobj.GetComponent <SpriteRenderer>(); } if (sprite == null) { sprite = new SpriteRenderer(); } sprite.SharedMaterial = mat; if (mainTex != null) { sprite.Rect = Rect.Align(Alignment.Center, 0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight); } convert.SuggestResultName(sprite, mat.Name); results.Add(sprite); } else { AnimSpriteRenderer sprite = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault(); if (sprite == null && gameobj != null) { sprite = gameobj.GetComponent <AnimSpriteRenderer>(); } if (sprite == null) { sprite = new AnimSpriteRenderer(); } sprite.SharedMaterial = mat; sprite.Rect = Rect.Align(Alignment.Center, 0.0f, 0.0f, (mainTex.PixelWidth / basePixmap.AnimCols) - basePixmap.AnimFrameBorder * 2, (mainTex.PixelHeight / basePixmap.AnimRows) - basePixmap.AnimFrameBorder * 2); sprite.AnimDuration = 5.0f; sprite.AnimFrameCount = basePixmap.AnimFrames; convert.SuggestResultName(sprite, mat.Name); results.Add(sprite); } convert.MarkObjectHandled(mat); } convert.AddResult(results); return(false); }
void ICmpUpdatable.OnUpdate() { RigidBody body = this.GameObj.RigidBody; AnimSpriteRenderer sprite = this.GameObj.GetComponent <AnimSpriteRenderer>(); int maxSpeed = PlayerParty[0].Stats.Speed; if (DualityApp.Keyboard[Key.Left] && DualityApp.Keyboard[Key.Up]) { body.LinearVelocity = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 5 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 5 / 4))); sprite.AnimFirstFrame = 0; sprite.AnimPaused = false; } else if (DualityApp.Keyboard[Key.Left] && DualityApp.Keyboard[Key.Down]) { body.LinearVelocity = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 3 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 3 / 4))); sprite.AnimFirstFrame = 0; sprite.AnimPaused = false; } else if (DualityApp.Keyboard[Key.Right] && DualityApp.Keyboard[Key.Up]) { body.LinearVelocity = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 7 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 7 / 4))); sprite.AnimFirstFrame = 0; sprite.AnimPaused = false; } else if (DualityApp.Keyboard[Key.Right] && DualityApp.Keyboard[Key.Down]) { body.LinearVelocity = new Vector2((float)(maxSpeed * Math.Cos(Math.PI / 4)), (float)(maxSpeed * Math.Sin(Math.PI / 4))); sprite.AnimFirstFrame = 0; sprite.AnimPaused = false; } else { if (DualityApp.Keyboard[Key.Left]) { body.LinearVelocity = new Vector2(-maxSpeed, 0); sprite.AnimFirstFrame = 0; sprite.AnimPaused = false; } else if (DualityApp.Keyboard[Key.Right]) { body.LinearVelocity = new Vector2(maxSpeed, 0); sprite.AnimFirstFrame = 8; sprite.AnimPaused = false; } if (DualityApp.Keyboard[Key.Up]) { body.LinearVelocity = new Vector2(0, -maxSpeed); sprite.AnimFirstFrame = 16; sprite.AnimPaused = false; } else if (DualityApp.Keyboard[Key.Down]) { body.LinearVelocity = new Vector2(0, maxSpeed); sprite.AnimFirstFrame = 24; sprite.AnimPaused = false; } } if ((DualityApp.Keyboard.KeyReleased(Key.Down) || DualityApp.Keyboard.KeyReleased(Key.Up)) && (!(DualityApp.Keyboard.KeyPressed(Key.Down)) || !(DualityApp.Keyboard.KeyPressed(Key.Up)))) { body.LinearVelocity = new Vector2(body.LinearVelocity.X, 0); sprite.AnimTime = 0; sprite.AnimPaused = true; } if ((DualityApp.Keyboard.KeyReleased(Key.Right) || DualityApp.Keyboard.KeyReleased(Key.Left)) && (!(DualityApp.Keyboard.KeyPressed(Key.Right)) || !(DualityApp.Keyboard.KeyPressed(Key.Left)))) { body.LinearVelocity = body.LinearVelocity = new Vector2(0, body.LinearVelocity.Y); sprite.AnimTime = 0; sprite.AnimPaused = true; } }
private int lastFrame; // Keeps track of last frame rendered for smoother animation blending. void ICmpUpdatable.OnUpdate() { RigidBody playerOne = this.GameObj.RigidBody; Transform playerMovement = this.GameObj.Transform; AnimSpriteRenderer playerSprite = this.GameObj.GetComponent <AnimSpriteRenderer>(); // Move left if (DualityApp.Keyboard[Key.Left]) { vectorMove = Vector2.UnitX * -1.0f; playerMovement.MoveBy(vectorMove * Time.TimeMult); } // Move right else if (DualityApp.Keyboard[Key.Right]) { vectorMove = Vector2.UnitX * 1.0f; playerMovement.MoveBy(vectorMove * Time.TimeMult); } // Move up else if (DualityApp.Keyboard[Key.Up]) { vectorMove = Vector2.UnitY * -1.0f; playerMovement.MoveBy(vectorMove * Time.TimeMult); } // Move down else if (DualityApp.Keyboard[Key.Down]) { vectorMove = Vector2.UnitY * 1.0f; playerMovement.MoveBy(vectorMove * Time.TimeMult); } // Punch Sequence else if (DualityApp.Keyboard[Key.S]) { // Modify frame sequence to render punch sequence animation playerSprite.CustomFrameSequence = new List <int>() { 24, 25, 26, 33 }; playerSprite.AnimLoopMode = AnimSpriteRenderer.LoopMode.Loop; playerSprite.AnimDuration = 1; playerSprite.UpdateVisibleFrames(); // Move toward current direction and display attack. playerMovement.MoveBy(vectorMove * Time.TimeMult); } // All custom frame sequences end in 27, the current default animation for the Goku SpriteSheet. Reset after an attack animation. if (playerSprite.CurrentFrame != lastFrame && playerSprite.CurrentFrame == 33) { playerSprite.CustomFrameSequence = new List <int>() { 33 }; playerSprite.AnimLoopMode = AnimSpriteRenderer.LoopMode.Once; } lastFrame = playerSprite.CurrentFrame; }