private void HandlePlaceBombAction(int i, PlayerInput input, Position position, Heading heading) { if (!input.PlaceBomb) { return; } // TODO: Find out which bomb type is currently selected from PlayerManager BombAsset bombAsset = BombariaBootstrap.BombManager.GetBombAsset(BombType.Normal); // TODO: Get placeBombActionCooldown from PlayerManager input.PlaceBombActionCooldown = BombariaBootstrap.Settings.placeBombActionCooldown; players.Input[i] = input; PostUpdateCommands.CreateEntity(BombariaBootstrap.BombSpawnArchetype); PostUpdateCommands.SetComponent(new BombSpawnRequest { Bomb = new Bomb { Type = bombAsset.Type, TimeBeforeIgnition = bombAsset.TimeBeforeIgnition, Energy = bombAsset.Energy }, Position = position, Heading = heading }); }
private void SpawnBomb(int i, Entity bombEntity, BombSpawnRequest bombSpawn) { BombAsset bombAsset = BombariaBootstrap.BombManager.GetBombAsset(bombSpawn.Bomb.Type); PostUpdateCommands.RemoveComponent <BombSpawnRequest>(bombEntity); PostUpdateCommands.AddComponent( bombEntity, bombSpawn.Bomb); PostUpdateCommands.AddComponent( bombEntity, bombSpawn.Position); PostUpdateCommands.AddComponent( bombEntity, bombSpawn.Heading); PostUpdateCommands.AddComponent( bombEntity, new BombBlink(bombAsset.TimeBeforeIgnition)); PostUpdateCommands.AddComponent( bombEntity, default(TransformMatrix)); PostUpdateCommands.AddSharedComponent( bombEntity, bombAsset.IdleLook); }
private BombAsset LoadBombAssetOrPanic(BombType type) { string path = BOMB_OBJECTS_PATH_PREFIX + type.ToString() /*+ ASSET_FILE_TYPE*/; BombAsset bombAsset = Resources.Load<BombAsset>(path); if(bombAsset == null) throw new System.Exception("Load BombAsset of BombType: " + type + " from path: " + path + " failed"); return bombAsset; }
public BombAsset GetBombAsset(BombType type) { if (cache.ContainsKey(type)) return cache[type]; BombAsset bombAsset = LoadBombAssetOrPanic(type); ; cache.Add(type, bombAsset); return bombAsset; }
private void HandleBlinking(int i, float dt, Entity bombEntity, Bomb bomb, BombBlink bombBlink, MeshInstanceRenderer bombLook) { BombAsset bombAsset = BombariaBootstrap.BombManager.GetBombAsset(bomb.Type); bombBlink.OverallTimer += dt; bombBlink.BlinkPeriodTimer += dt; if (bombBlink.OverallTimer < bombBlink.Duration025) { bombBlink.Period = bombBlink.Duration; } else if (bombBlink.OverallTimer >= bombBlink.Duration025 && bombBlink.OverallTimer < bombBlink.Duration05) { bombBlink.Period = bombBlink.DurationDiv4; } else if (bombBlink.OverallTimer >= bombBlink.Duration05 && bombBlink.OverallTimer < bombBlink.Duration075) { bombBlink.Period = bombBlink.DurationDiv8; } else if (bombBlink.OverallTimer >= bombBlink.Duration075 && bombBlink.OverallTimer < bombBlink.Duration) { bombBlink.Period = bombBlink.DurationDiv16; } else if (bombBlink.OverallTimer >= bombBlink.Duration) { return; } if (bombBlink.BlinkPeriodTimer >= bombBlink.Period) { bombBlink.BlinkPeriodTimer = 0; MeshInstanceRenderer newLook; if (bombLook.Equals(bombAsset.IdleLook)) { newLook = bombAsset.BlinkLook; } else if (bombLook.Equals(bombAsset.BlinkLook)) { newLook = bombAsset.IdleLook; } else { throw new System.Exception("Undefined blinking behavior occurred"); } PostUpdateCommands.RemoveComponent <MeshInstanceRenderer>(bombEntity); PostUpdateCommands.AddSharedComponent(bombEntity, newLook); } bombBlinkData.BombBlink[i] = bombBlink; }