public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= Time.deltaTime; if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; if (c.chip_anim_frame > 0) // cannon animation has 1 frame more than shoot at the front { navi.controlledSpriteSet(c.chip_anim_frame - 1); } if (c.chip_anim_frame == 2) { navi.shot_handler.check_bust(c.power, navi.playerNumber, c.stun, c.elem); // shot fired on 3rd frame } } else // animation finished { c.deactivate(navi); } } }
public override void initAnim(Navi navi, ChipLogic c) { List <Sprite> subarray = new List <Sprite>(); int start; // index of first frame in sheet switch (c.sword_size) { case 1: // sword (1x1) start = 4; break; case 2: // longsword (1x2) start = 0; break; case -1: // widesword (3x1) start = 8; break; default: // unlisted sword size: NOT A SWORD start = 0; break; } int i = 0; while (i < 4) // animation is 4 frames long { subarray.Add(effectAnim[start + i]); i++; } slash_eff = subarray.ToArray(); // load only corresponding cannon frames // prepare renderer for slash effect then deactivate until time to render slash_renderer = new GameObject(); slash_renderer.AddComponent <SpriteRenderer>(); slash_frame = 0; slash_renderer.GetComponent <SpriteRenderer>().sprite = slash_eff[slash_frame]; slash_renderer.GetComponent <SpriteRenderer>().sortingOrder = 6; //top layer, hit effect shows above auras if (!navi.myNavi()) // flip slash effect horizontally when created by opponent { slash_renderer.GetComponent <SpriteRenderer>().flipX = true; } slash_renderer.SetActive(false); hit = true; // reset hit check boolean to true until active frame of attack // take control of navi sword animation to sync animations c.chip_anim_frame = 0; c.frametimer = 2 * c.chipFR; // first frame is longer navi.rate_controlled = true; navi.swordAnim = true; navi.controlledSpriteSet(0); //sound navi.GetComponent <AudioSource>().PlayOneShot(Resources.Load <AudioClip>("Audio/s_sword")); c.interrupt = true; //sword attacks can be interrupted at any time }
public override void initAnim(Navi navi, ChipLogic c) { c.chip_sprite = new Sprite[] { effectAnim[effectAnim.Length - 1] }; //Wrecker is currently only throw object being used and is last index c.chip_anim_frame = 0; c.frametimer = c.chipFR; navi.throwAnim = true; navi.rate_controlled = true; navi.controlledSpriteSet(c.chip_anim_frame); c.chip_renderObj.transform.position = navi.transform.position + (navi.throw_offset[c.chip_anim_frame] * navi.transform.localScale.x); this.row = navi.row; this.col = navi.column; c.interrupt = true; // thrown attacks can be interrupted up until the point when the object is actually thrown }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= Time.deltaTime; if (!hit) // try hit { hit = navi.shot_handler.check_sword(c.power, navi.playerNumber, c.stun , System.Math.Abs(c.sword_size), (c.sword_size < 0), c.elem); } if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < navi.swordSprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; if (c.chip_renderObj != null) // chip has a sword overlay to display { c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } navi.controlledSpriteSet(c.chip_anim_frame); // sword effects and sword anim have same number of frames if (slash_renderer.activeInHierarchy) // animate slash effect when active { if (slash_frame < slash_eff.Length - 1) { slash_frame++; slash_renderer.GetComponent <SpriteRenderer>().sprite = slash_eff[slash_frame]; } else { slash_renderer.SetActive(false); // deactivate when animation finishes } } if (c.chip_anim_frame == 2) // attack takes place on 3rd frame { hit = false; // flag hit as false to start checking for hits // place slash effect 1 space in front of navi int target_space = (navi.myNavi()) ? navi.field_space + 1 : navi.field_space - 1; slash_renderer.transform.position = navi.field.spaces[target_space].transform.position; slash_renderer.SetActive(true); } } else // animation finished { c.deactivate(navi); } } }
public override void initAnim(Navi navi, ChipLogic c) { List <Sprite> subarray = new List <Sprite>(); int start; // index of first frame in sheet switch (c.ID) { case 2: // HiCannon start = 6; break; case 3: // MCannon start = 12; break; default: // Cannon or ID not listed, so default to Cannon start = 0; break; } int i = 0; while (i < 6) // animation is 6 frames long { subarray.Add(effectAnim[start + i]); i++; } c.chip_sprite = subarray.ToArray(); // load only corresponding cannon frames c.chip_renderObj.transform.position += navi.buster_offset; // offset sprite to match navi c.chip_anim_frame = 0; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; c.chip_renderObj.GetComponent <SpriteRenderer>().sortingOrder = 2; //sorted just above navi c.frametimer = c.chipFR; // take control of navi shoot animation to sync animations navi.rate_controlled = true; navi.shootAnim = true; navi.controlledSpriteSet(0); //audio navi.GetComponent <AudioSource>().PlayOneShot(Resources.Load <AudioClip>("Audio/Cannon HQ")); // audio clip needs silenced trimmed from start c.interrupt = true; // cannons can be interrupted at any time }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= TrueSyncManager.DeltaTime.AsFloat(); if (c.frametimer <= 0) // advance frame //TODO: may need 2 frame variables for animated throw objs { c.chip_anim_frame++; c.frametimer = c.chipFR; if (c.chip_anim_frame < navi.throw_offset.Length) // throw obj still following throw anim { c.chip_renderObj.transform.position = navi.transform.position + (navi.throw_offset[c.chip_anim_frame] * navi.transform.localScale.x); } if (c.chip_anim_frame < navi.throwSprite.Length) { navi.controlledSpriteSet(c.chip_anim_frame); } else // throw animation finished { navi.throwAnim = false; navi.rate_controlled = false; } } if (c.chip_anim_frame >= navi.throw_offset.Length) // trajectory calculation { c.interrupt = false; // object has left the hand, can no longer be interrupted c.chip_renderObj.transform.SetParent(navi.field.grid[row][col].transform); //!!! WARNING BAD MATH AHEAD !!! float x = c.chip_renderObj.transform.position.x; x += (5.7f * TrueSyncManager.DeltaTime.AsFloat()) * ((navi.myNavi())?2:-2); //float x = (-0.18f + (5.5f * TrueSyncManager.DeltaTime.AsFloat())); float y = c.chip_renderObj.transform.position.y; y += (4.6f * TrueSyncManager.DeltaTime.AsFloat()) - 0.027f * Math.Abs(navi.field.grid[0][col].transform.position.x - c.chip_renderObj.transform.position.x); //c.chip_renderObj.transform.position = new Vector3(x, ((-0.112f * (x * x)) + (0.399f * x) + (navi.field.grid[navi.row][0].transform.position.y))); c.chip_renderObj.transform.position = new Vector3(x, y); if ((Math.Abs(c.chip_renderObj.transform.position.x - c.chip_renderObj.transform.parent.position.x)) >= 12) { c.deactivate(navi); } } }